// 个人中心页面逻辑
Page({
  /**
   * 页面的初始数据
   */
  data: {
    userInfo: {
      id: 1,
      nickname: '小明同学',
      avatar_url: '/static/icons/avatar-placeholder.png',
      exam_name: 'CET-6',
      exam_date: '2025-07-09',
      days_until_exam: 28,
      total_study_time: 7680, // 总学习时长（分钟）, 对应128小时
      total_study_hours: 128, // 预计算的总学时
      current_points: 850,
      study_streak: 30, // 连续学习天数
      total_sessions: 45, // 总学习会话数
      achievements: [
        { id: 1, name: '初学者', icon: '🌱', unlocked: true },
        { id: 2, name: '坚持者', icon: '💪', unlocked: true },
        { id: 3, name: '学霸', icon: '🎓', unlocked: false }
      ]
    },
    hasUserInfo: true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.loadUserInfo();
    console.log('个人中心页面加载成功');
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 仅使用本地缓存，避免每次进入都请求云端
    this.loadLocalUserInfo();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '督搭 - 学习监督小程序',
      path: '/pages/profile/profile'
    }
  },

  /**
   * 退出登录
   */
  logout() {
    wx.showModal({
      title: '确认退出',
      content: '确定要退出登录吗？',
      confirmText: '确定',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          this.performLogout();
        }
      }
    });
  },

  /**
   * 执行退出登录操作
   */
  performLogout() {
    wx.showLoading({
      title: '退出中...',
      mask: true
    });

    // 调用退出登录云函数
    wx.cloud.callFunction({
      name: 'logout',
      success: res => {
        console.log('退出登录云函数调用成功:', res);
        
        if (res.result.success) {
          // 清除本地存储的用户信息
          wx.removeStorageSync('userInfo');
          wx.removeStorageSync('hasUserInfo');
          
          // 清除全局数据
          const app = getApp();
          app.globalData.userInfo = null;
          app.globalData.hasUserInfo = false;
          
          wx.hideLoading();
          
          wx.showToast({
            title: '退出成功',
            icon: 'success',
            duration: 1500,
            success: () => {
              // 延迟跳转，让用户看到成功提示
              setTimeout(() => {
                wx.reLaunch({
                  url: '/subpkg/pages/login/login'
                });
              }, 1500);
            }
          });
        } else {
          wx.hideLoading();
          wx.showToast({
            title: res.result.message || '退出失败',
            icon: 'error',
            duration: 2000
          });
        }
      },
      fail: err => {
        console.error('退出登录云函数调用失败:', err);
        wx.hideLoading();
        
        // 即使云函数调用失败，也执行本地退出逻辑
        wx.showModal({
          title: '网络异常',
          content: '云函数调用失败，是否仍要退出登录？',
          confirmText: '仍要退出',
          cancelText: '取消',
          success: (modalRes) => {
            if (modalRes.confirm) {
              // 清除本地存储
              wx.removeStorageSync('userInfo');
              wx.removeStorageSync('hasUserInfo');
              
              // 清除全局数据
              const app = getApp();
              app.globalData.userInfo = null;
              app.globalData.hasUserInfo = false;
              
              wx.showToast({
                title: '已退出登录',
                icon: 'success',
                duration: 1500,
                success: () => {
                  setTimeout(() => {
                    wx.reLaunch({
                      url: '/subpkg/pages/login/login'
                    });
                  }, 1500);
                }
              });
            }
          }
        });
      }
    });
  },

  /**
   * 加载用户信息
   */
  loadUserInfo() {
    // 显示加载提示
    wx.showLoading({
      title: '加载用户信息...'
    });
    
    // 调用云函数获取用户信息
    wx.cloud.callFunction({
      name: 'getUserInfo',
      success: res => {
        console.log('获取用户信息成功:', res.result);
        
        if (res.result.code === 0) {
          const cloudUserInfo = res.result.data;
          
          // 合并云端用户信息和本地模拟数据
          const mergedUserInfo = {
            ...this.data.userInfo, // 保留本地的学习数据
            id: cloudUserInfo.openid,
            nickname: cloudUserInfo.nickName,
            avatar_url: cloudUserInfo.avatarUrl,
            openid: cloudUserInfo.openid,
            gender: cloudUserInfo.gender,
            city: cloudUserInfo.city,
            province: cloudUserInfo.province,
            country: cloudUserInfo.country,
            createTime: cloudUserInfo.createTime,
            updateTime: cloudUserInfo.updateTime
          };
          
          // 在JS中计算总学时
          mergedUserInfo.total_study_hours = Math.floor((mergedUserInfo.total_study_time || 0) / 60);
          
          // 更新本地存储
          wx.setStorageSync('userInfo', mergedUserInfo);
          // 记录最近一次云端拉取时间
          wx.setStorageSync('userInfo_last_fetch_at', Date.now());
          
          // 更新页面数据
          this.setData({
            userInfo: mergedUserInfo,
            hasUserInfo: true
          });
          
          wx.hideLoading();
          console.log('用户信息加载完成:', mergedUserInfo);
        } else {
          wx.hideLoading();
          console.error('获取用户信息失败:', res.result.msg);
          
          if (res.result.code === -1) {
            this.forceReLogin(res.result.msg || '请重新登录');
          } else {
            // 如果云函数获取失败，使用本地存储
            this.loadLocalUserInfo();
          }
        }
      },
      fail: err => {
        console.error('云函数调用失败:', err);
        wx.hideLoading();
        
        // 云函数调用失败，使用本地存储
        this.loadLocalUserInfo();
      }
    });
  },

  /**
   * 从本地存储加载用户信息
   */
  loadLocalUserInfo() {
    const userInfo = wx.getStorageSync('userInfo');
    
    if (userInfo) {
      // 合并本地用户信息和默认数据
      const mergedUserInfo = {
        ...this.data.userInfo, // 保留默认的学习数据
        id: userInfo.id || userInfo.openid,
        nickname: userInfo.nickname || userInfo.nickName || '微信用户',
        avatar_url: userInfo.avatar_url || userInfo.avatarUrl || '/static/icons/avatar-placeholder.png',
        openid: userInfo.openid
      };
      
      // 在JS中计算总学时
      mergedUserInfo.total_study_hours = Math.floor((mergedUserInfo.total_study_time || 0) / 60);
      
      this.setData({
        userInfo: mergedUserInfo,
        hasUserInfo: true
      });
      
      console.log('本地用户信息加载完成:', mergedUserInfo);
    } else {
      console.log('本地无用户信息，跳转到登录页');
      wx.reLaunch({
        url: '/subpkg/pages/login/login'
      });
    }
  },

  // 强制退回登录页（清理本地与全局态）
  forceReLogin(reason = '请重新登录') {
    try {
      wx.removeStorageSync('local_token');
      wx.removeStorageSync('refresh_token');
      wx.removeStorageSync('userInfo');
    } catch (e) {}
    const app = getApp();
    if (app && app.globalData) {
      app.globalData.local_token = null;
      app.globalData.userInfo = null;
    }
    wx.showToast({ title: reason, icon: 'none', duration: 1500 });
    setTimeout(() => {
      wx.reLaunch({ url: '/subpkg/pages/login/login' });
    }, 800);
  }
})

